// 一个数据结构只要部署了Symbol.iterator属性，就被视为具有 iterator 接口，就可以用for...of循环遍历它的成员。也就是说，for...of循环内部调用的是数据结构的Symbol.iterator方法。
// function makeIterator(arr){
//     var nextIndex=0;
//     return {
//         next:function(){
//             return nextIndex<arr.length?
//             {value:arr[nextIndex++],done:false}:
//             {value:undefined,done:true};
//         }
//     }
// }
// var it=makeIterator(['a','b','c']);
// console.log(it.next());
// console.log(it.next());
// console.log(it.next());
// console.log(it.next());
// console.log(it.next());

// class RangeIterator {
//     constructor(start, stop) {
//         this.value = start;
//         this.stop = stop;
//     }

//     [Symbol.iterator]() { return this; }

//     next() {
//         var value = this.value;
//         if (value < this.stop) {
//             this.value++;
//             return { done: false, value: value };
//         }
//         return { done: true, value: undefined };
//     }
// }

// function range(start, stop) {
//     return new RangeIterator(start, stop);
// }

// for (var value of range(0, 3)) {
//     console.log(value); // 0, 1, 2
// }
// var obj={
//     data:['hello','world'],
//     [Symbol.iterator](){
//         var self=this;
//         let index=0;
//         return {
//             next:function(){
//                 if(index<self.data.length){
//                     return {value:self.data[index++],done:false}
//                 }else{
//                     return {value:undefined,done:true};
//                 }
//             }
//         }
//     }
// }

// for(var i of obj){
//     console.log(i)
// }
// let iterable={
//     0:'a',
//     1:'b',
//     2:'c',
//     length:3,
//     [Symbol.iterator]:Array.prototype[Symbol.iterator]
// }
// for(let i of iterable){
//     console.log(i)
// }
// let arrayLike = { length: 2, 0: 'a', 1: 'b' };
// for (let x of Array.from(arrayLike)) {
//     console.log(x);
// }
// let obj={
//     a:'zhangsan',
//     name:'zwang'
// }
// // obj.__proto__=Object.prototype
// Object.prototype.age=10
// for(let i in obj){
//     console.log(i)
// }
// for (var n of obj) {
//     console.log(n);
// }